package buildcode.language.java;

import java.math.BigDecimal;
import java.sql.Types;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class JavaUtil {
    private static final Map<Integer, Class<?>> JDBC_JAVA_TYPE_MAP = new HashMap<>();

    static {
        JDBC_JAVA_TYPE_MAP.put(Types.BIT, Integer.class);
        JDBC_JAVA_TYPE_MAP.put(Types.TINYINT, Integer.class);
        JDBC_JAVA_TYPE_MAP.put(Types.SMALLINT, Integer.class);
        JDBC_JAVA_TYPE_MAP.put(Types.INTEGER, Integer.class);
        JDBC_JAVA_TYPE_MAP.put(Types.BIGINT, Long.class);
        JDBC_JAVA_TYPE_MAP.put(Types.FLOAT, Double.class);
        JDBC_JAVA_TYPE_MAP.put(Types.DOUBLE, Double.class);
        JDBC_JAVA_TYPE_MAP.put(Types.NUMERIC, Double.class);
        JDBC_JAVA_TYPE_MAP.put(Types.DECIMAL, BigDecimal.class);
        JDBC_JAVA_TYPE_MAP.put(Types.CHAR, String.class);
        JDBC_JAVA_TYPE_MAP.put(Types.VARCHAR, String.class);
        JDBC_JAVA_TYPE_MAP.put(Types.LONGVARCHAR, String.class);
        JDBC_JAVA_TYPE_MAP.put(Types.DATE, Date.class);
        JDBC_JAVA_TYPE_MAP.put(Types.TIME, Date.class);
        JDBC_JAVA_TYPE_MAP.put(Types.TIMESTAMP, Date.class);
        JDBC_JAVA_TYPE_MAP.put(Types.NCHAR, String.class);
        JDBC_JAVA_TYPE_MAP.put(Types.NVARCHAR, String.class);
        JDBC_JAVA_TYPE_MAP.put(Types.LONGNVARCHAR, String.class);
        JDBC_JAVA_TYPE_MAP.put(Types.SQLXML, String.class);
        JDBC_JAVA_TYPE_MAP.put(Types.TIME_WITH_TIMEZONE, Date.class);
        JDBC_JAVA_TYPE_MAP.put(Types.TIMESTAMP_WITH_TIMEZONE, Date.class);
    }

    public static final Class<?> getJavaTypeByJdbcType(int jdbcType) {
        return JDBC_JAVA_TYPE_MAP.get(jdbcType);
    }
}
